//
//  AppDelegate.swift
//  vveboSwiftPro
//
//  Created by 杨笑怡 on 15/6/28.
//  Copyright © 2015年 YangXiaoYi. All rights reserved.
//

import UIKit
import AFNetworking

/// 全局变量，记录用户账号信息,只加载一次用户账号，后续再获取 token，就不需要再去磁盘加载
/// 执行时机，在需要的时候才会执行，不是程序一启动就执行
var sharedUserAccount = UserAccount.loadAccount()
/// 切换跟控制器的通知
let XLSwitchRootVCNotification = "XLSwitchRootVCNotification"


/// 定义 全局变量时，要放在这之前，否则会报错
/// 表示程序的入口，swift中没有main.m
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        // 打印归档保存的用户信息
        print(sharedUserAccount)
        
        // 设置外观
        setupAppearance()
        
        // 设置网络
        setupNetwork()
        
        window = UIWindow(frame: UIScreen.mainScreen().bounds)
        window?.backgroundColor = UIColor.whiteColor()
        window?.rootViewController = defaultViewController()
        
        window?.makeKeyAndVisible()
        
        // 注册通知
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "switchRootVC:", name: XLSwitchRootVCNotification, object: nil)
        
        return true
    }
    
    deinit {
        // 注销通知
        NSNotificationCenter.defaultCenter().removeObserver(self, name: "XLSwitchRootVCNotification", object: nil)
    }
    
    ///  切换控制器
    func switchRootVC(n:NSNotification) {
        // 判断是否为true，如果是，显示MainViewController
        let isMainVC = n.object as! Bool
        window?.rootViewController = isMainVC ? MainViewController() : WelcomeViewController()
    }
    
    private func defaultViewController() -> UIViewController {
        // 1. 判断用户是否登录 
        if sharedUserAccount != nil {
        // 2. 如果登录，判断是否有新版本
            return isNewUpdate() ? NewFeatureCollectionViewController() : WelcomeViewController()
        }
        return MainViewController()
    }
    
    ///  是否是新版本
    private func isNewUpdate() -> Bool {
        // 1. 获取应用程序‘当前版本’
        let currentVersion = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
//        let version = NSNumberFormatter().numberFromString(currentVersion)!.doubleValue
        // XCode 2.0 可以直接转
        let version = Double(currentVersion)!
        
//        print(version)
        // 2. 获取应用程序‘之前的版本’，从用户偏好中读取
        let versionKey = "versionKey"
        let sandBoxVersion = NSUserDefaults.standardUserDefaults().doubleForKey(versionKey)

        // 3. 将‘当前版本’写入用户偏好
        NSUserDefaults.standardUserDefaults().setDouble(version, forKey: versionKey)
        
        return version > sandBoxVersion
    }
    
    ///  设置网络
    private func setupNetwork() {
        // 设置网络指示器
        AFNetworkActivityIndicatorManager.sharedManager().enabled = true
        // 设置网络缓存
        let urlCache = NSURLCache(memoryCapacity: 4 * 1024 * 1024, diskCapacity: 20 * 1024 * 1024, diskPath: nil)
        NSURLCache.setSharedURLCache(urlCache) 
    }
    
    ///  设置外观
    private func setupAppearance() {
        // 设置外观，一经设置全局有效，必须早，通常会看到 appDelegate 中存在设置外观的代码
        UINavigationBar.appearance().tintColor = UIColor.orangeColor()
        UITabBar.appearance().tintColor = UIColor.orangeColor()
    }
}

